package model.Publicacion;
import java.util.ArrayList;
import java.util.List;

import model.Usuario.Usuario;
import model.votoYfav.Favorito;
import model.votoYfav.Voto;

import org.joda.time.DateTime;




public abstract class Publicacion
{
	   protected String cuerpo;
		
		protected DateTime fecha;
		

			
		protected List<Voto> votos;
		
		protected List<Favorito> favoritos;
		protected boolean eliminada;
		
		public Publicacion(String cuerpo)
		{
			this.cuerpo = cuerpo;
			this.fecha = DateTime.now();
			this.eliminada=false;
			this.favoritos = new ArrayList<Favorito>();
			this.votos = new ArrayList<Voto>();
		}
		

		
	public void SumarFavorito(Favorito favorito) {
		favoritos.add(favorito);	
	}
	
	public List<Favorito> getFavoritos(){
		return this.favoritos;
	}
	
	public int getCantVotosPositivos() {
		int cantidad=0;
		for(Voto v:votos)
		{
			if(v.aFavor())
			{
				cantidad++;
			}
		}
		return cantidad;
	}
	
	
	
	public int getCantVotosNegativos() {
		
		int cantidad=0;
		for(Voto v:votos)
		{
			if(!v.aFavor())
			{
				cantidad++;
			}
		}
		return cantidad;	
	}
	
	
	public int getCantFavoritos() {
		
		return favoritos.size();	
	}
	
	
	
	public void sacarVotoDe(Usuario usuario) {
		    
		for(Voto v:votos)
		{
			if(v.getDuenio().equals(usuario))
			{
				v.getDuenio().eliminarVoto(v);
				votos.remove(v);
			}
		}
	}
	
	
	
	public void sacarFavoritoDe(Usuario usuario) {
		
          for(Favorito f: favoritos)
          {
        	  if(f.getDuenio().equals(usuario))
        	  {
        		  f.getDuenio().eliminarFavorito(f);
        		  favoritos.remove(f);
        	  }
          }
	}
	

	public String getCuerpo() {
		
		return cuerpo;	
	}
	
	
	
	public DateTime getFecha() {
		
		return fecha;	
	}


	public void sumarVoto(Voto voto) {
		votos.add(voto);
	}


	public void setCuerpo(String cuerpo) {
		this.cuerpo = cuerpo;
		
	}
    public void eliminar()
    {
    	eliminada=true;
    }
    public boolean estaEliminada()
    {
    	return eliminada;
    }


	public int getCantVotos() {
		
		return this.getCantVotosNegativos()+this.getCantVotosPositivos();
	}

	
	
}

